﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ECOSYSTEM_Dominio;
namespace ECOSYSTEM_DAL
{
    public class ProformaDAL
    {
        SqlConnection cnn;
        Int32 CodigoProforma, UlitmoCodigo;
        public Int32 guardarProforma(Proforma laProforma) {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("RegistrarProforma", cnn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("NroProforma",laProforma.NroProforma);
                cmd.Parameters.AddWithValue("FecEmisionProf",laProforma.FecEmisProf);
                cmd.Parameters.AddWithValue("DescGarantia",laProforma.DescripGaranProf);
                cmd.Parameters.AddWithValue("EspecifProf", laProforma.EspecProf);
                cmd.Parameters.AddWithValue("TipoMoneda", laProforma.TipoMoneda);
                cmd.Parameters.AddWithValue("TipoCambio",laProforma.TipoCambio);
                cmd.Parameters.AddWithValue("TotalProf",laProforma.TotalProf);
                cmd.Parameters.AddWithValue("RUCCliente", laProforma.elClienteID);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read()) {
                    UlitmoCodigo = Convert.ToInt32(dr["UltimoCodigo"]);
                }
             }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally {
                if (cnn.State == ConnectionState.Open) {
                    cnn.Close();
                }
            }
            return UlitmoCodigo;
        }
        public Boolean ActualizaProforma(Proforma laProforma, Int32 CodiProf, String CompararNroProf)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ActualizarProforma", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("ProformaID",CodiProf);
                cmd.Parameters.AddWithValue("NroProforma", laProforma.NroProforma);
                cmd.Parameters.AddWithValue("NroProformaComparar", CompararNroProf);
                cmd.Parameters.AddWithValue("FecEmisionProf", laProforma.FecEmisProf);
                cmd.Parameters.AddWithValue("DescGarantia", laProforma.DescripGaranProf);
                cmd.Parameters.AddWithValue("EspecifProf", laProforma.EspecProf);
                cmd.Parameters.AddWithValue("TipoMoneda", laProforma.TipoMoneda);
                cmd.Parameters.AddWithValue("TipoCambio", laProforma.TipoCambio);
                cmd.Parameters.AddWithValue("TotalProf", laProforma.TotalProf);
                cmd.Parameters.AddWithValue("RUCCliente",laProforma.elClienteID);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public Boolean guardarDetalleProforma(Proforma.DetalleProforma elDetalleProforma) {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("RegistrarDetalleProforma", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@ProductoID", SqlDbType.Int);
                cmd.Parameters.Add("@ProformaID", SqlDbType.Int);
                cmd.Parameters.Add("@CantidadProd", SqlDbType.Int,6);
                cmd.Parameters.Add("@PrecioProducto", SqlDbType.Float);
                cmd.Parameters["@CantidadProd"].Value = elDetalleProforma.CantidadProd;
                cmd.Parameters["@PrecioProducto"].Value = elDetalleProforma.PrecioProf;
                cmd.Parameters["@ProductoID"].Value = elDetalleProforma.elProducto;
                cmd.Parameters["@ProformaID"].Value = elDetalleProforma.laProforma;
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally {
                if (cnn.State == ConnectionState.Open) {
                    cnn.Close();
                }
            }
            return true;
        }
        public Boolean ActualizarDetalleProforma(Proforma.DetalleProforma elDetalleProforma)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ActualizarDetalleProforma", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@ProductoID", SqlDbType.Int);
                cmd.Parameters.Add("@ProformaID", SqlDbType.Int);
                cmd.Parameters.Add("@CantidadProd", SqlDbType.Int, 6);
                cmd.Parameters.Add("@PrecioProducto", SqlDbType.Float);
                cmd.Parameters["@CantidadProd"].Value = elDetalleProforma.CantidadProd;
                cmd.Parameters["@PrecioProducto"].Value = elDetalleProforma.PrecioProf;
                cmd.Parameters["@ProductoID"].Value = elDetalleProforma.elProducto;
                cmd.Parameters["@ProformaID"].Value = elDetalleProforma.laProforma;
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public List<Proforma.DetalleProforma> ObtenerDetalleProformaEmitida(Int32 ProformaID)
        {
            List<Proforma.DetalleProforma> lista;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ObtenerDetalleProformaEmitida", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("ProformaID", ProformaID);
                lista = new List<Proforma.DetalleProforma>();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Proforma.DetalleProforma elDetalle = new Proforma.DetalleProforma();
                    elDetalle.NameProduc = dr["NameProduc"].ToString();
                    elDetalle.CantidadProd = Convert.ToInt32(dr["CantidadProd"]);
                    elDetalle.PrecioProf = Convert.ToDouble(dr["PrecioProducto"]);
                    elDetalle.elProducto = Convert.ToInt32(dr["ProductoID"]);
                    lista.Add(elDetalle);
                }
                return lista;
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
        }
        public Int32 ObtenerCodigoProforma() {
            try
            {
                
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ObtenerCodigoProforma", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    CodigoProforma = Convert.ToInt32(dr["CodigoProforma"]);                    
                }
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return CodigoProforma;
        }
        public DataTable ObtenerListaDeProformas(String Fecha)
        {
            DataTable lista = null;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlDataAdapter da = new SqlDataAdapter("ObtenerListaProformas", cnn);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.Parameters.AddWithValue("Fecha", Fecha);
                lista = new DataTable();
                da.Fill(lista);
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return lista;
        }
        public Boolean EliminarProductoListaDetalle(Int32 IDProducto, Int32 IDProforma) {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ElimiarProductoListaDetalleProforma", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("IDProducto", IDProducto);
                cmd.Parameters.AddWithValue("IDProforma", IDProforma);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
    }
}
